// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package com.nostra13.universalimageloader.core.decode;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import com.nostra13.universalimageloader.core.download.ImageDownloader;
import com.nostra13.universalimageloader.utils.ImageSizeUtils;
import com.nostra13.universalimageloader.utils.IoUtils;
import com.nostra13.universalimageloader.utils.L;
import java.io.IOException;
import java.io.InputStream;
// Referenced classes of package com.nostra13.universalimageloader.core.decode:
// ImageDecoder, ImageDecodingInfo
public class BaseImageDecoder
implements ImageDecoder
{
protected static final String ERROR_CANT_DECODE_IMAGE = "Image can't be decoded [%s]";
protected static final String LOG_FLIP_IMAGE = "Flip image horizontally [%s]";
protected static final String LOG_ROTATE_IMAGE = "Rotate image on %1$d\260 [%2$s]";
protected static final String LOG_SCALE_IMAGE = "Scale subsampled image (%1$s) to %2$s (scale = %3$.5f) [%4$s]";
protected static final String LOG_SUBSAMPLE_IMAGE = "Subsample original image (%1$s) to %2$s (scale = %3$d) [%4$s]";
protected final boolean loggingEnabled;
public BaseImageDecoder(boolean flag)
{
loggingEnabled = flag;
}
private boolean a(String s, String s1)
{
return android.os.Build.VERSION.SDK_INT >= 5 && "image/jpeg".equalsIgnoreCase(s1) && com.nostra13.universalimageloader.core.download.ImageDownloader.Scheme.ofUri(s) == com.nostra13.universalimageloader.core.download.ImageDownloader.Scheme.FILE;
}
protected Bitmap considerExactScaleAndOrientatiton(Bitmap bitmap, ImageDecodingInfo imagedecodinginfo, int i, boolean flag)
{
Matrix matrix = new Matrix();
ImageScaleType imagescaletype = imagedecodinginfo.getImageScaleType();
if (imagescaletype == ImageScaleType.EXACTLY || imagescaletype == ImageScaleType.EXACTLY_STRETCHED)
{
ImageSize imagesize = new ImageSize(bitmap.getWidth(), bitmap.getHeight(), i);
ImageSize imagesize1 = imagedecodinginfo.getTargetSize();
com.nostra13.universalimageloader.core.assist.ViewScaleType viewscaletype = imagedecodinginfo.getViewScaleType();
boolean flag1;
float f;
Bitmap bitmap1;
Object aobj[];
Object aobj1[];
if (imagescaletype == ImageScaleType.EXACTLY_STRETCHED)
{
flag1 = true;
} else
{
flag1 = false;
}
f = ImageSizeUtils.computeImageScale(imagesize, imagesize1, viewscaletype, flag1);
if (Float.compare(f, 1.0F) != 0)
{
matrix.setScale(f, f);
if (loggingEnabled)
{
Object aobj2[] = new Object[4];
aobj2[0] = imagesize;
aobj2[1] = imagesize.scale(f);
aobj2[2] = Float.valueOf(f);
aobj2[3] = imagedecodinginfo.getImageKey();
L.d("Scale subsampled image (%1$s) to %2$s (scale = %3$.5f) [%4$s]", aobj2);
}
}
}
if (flag)
{
matrix.postScale(-1F, 1.0F);
if (loggingEnabled)
{
aobj1 = new Object[1];
aobj1[0] = imagedecodinginfo.getImageKey();
L.d("Flip image horizontally [%s]", aobj1);
}
}
if (i != 0)
{
matrix.postRotate(i);
if (loggingEnabled)
{
aobj = new Object[2];
aobj[0] = Integer.valueOf(i);
aobj[1] = imagedecodinginfo.getImageKey();
L.d("Rotate image on %1$d\260 [%2$s]", aobj);
}
}
bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
if (bitmap1 != bitmap)
{
bitmap.recycle();
}
return bitmap1;
}
public Bitmap decode(ImageDecodingInfo imagedecodinginfo)
{
InputStream inputstream = getImageStream(imagedecodinginfo);
ImageFileInfo imagefileinfo;
Bitmap bitmap;
imagefileinfo = defineImageSizeAndRotation(inputstream, imagedecodinginfo);
inputstream = resetStream(inputstream, imagedecodinginfo);
bitmap = BitmapFactory.decodeStream(inputstream, null, prepareDecodingOptions(imagefileinfo.imageSize, imagedecodinginfo));
IoUtils.closeSilently(inputstream);
Exception exception;
if (bitmap == null)
{
Object aobj[] = new Object[1];
aobj[0] = imagedecodinginfo.getImageKey();
L.e("Image can't be decoded [%s]", aobj);
return bitmap;
} else
{
return considerExactScaleAndOrientatiton(bitmap, imagedecodinginfo, imagefileinfo.exif.rotation, imagefileinfo.exif.flipHorizontal);
}
exception;
IoUtils.closeSilently(inputstream);
throw exception;
}
protected ExifInfo defineExifOrientation(String s)
{
int i;
boolean flag;
i = 0;
flag = true;
int j = (new ExifInterface(com.nostra13.universalimageloader.core.download.ImageDownloader.Scheme.FILE.crop(s))).getAttributeInt("Orientation", 1);
i = 0;
j;
JVM INSTR tableswitch 1 8: default 76
// 1 76
// 2 78
// 3 96
// 4 98
// 5 107
// 6 88
// 7 90
// 8 105;
goto _L1 _L1 _L2 _L3 _L4 _L5 _L6 _L7 _L8
_L2:
break; /* Loop/switch isn't completed */
_L1:
flag = false;
_L10:
return new ExifInfo(i, flag);
_L6:
flag = false;
_L7:
i = 90;
continue; /* Loop/switch isn't completed */
_L3:
flag = false;
_L4:
i = 180;
continue; /* Loop/switch isn't completed */
_L8:
flag = false;
_L5:
i = 270;
if (true) goto _L10; else goto _L9
_L9:
IOException ioexception;
ioexception;
Object aobj[] = new Object[flag];
aobj[0] = s;
L.w("Can't read EXIF tags from file [%s]", aobj);
if (true) goto _L1; else goto _L11
_L11:
}
protected ImageFileInfo defineImageSizeAndRotation(InputStream inputstream, ImageDecodingInfo imagedecodinginfo)
{
android.graphics.BitmapFactory.Options options = new android.graphics.BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputstream, null, options);
String s = imagedecodinginfo.getImageUri();
ExifInfo exifinfo;
if (imagedecodinginfo.shouldConsiderExifParams() && a(s, options.outMimeType))
{
exifinfo = defineExifOrientation(s);
} else
{
exifinfo = new ExifInfo();
}
return new ImageFileInfo(new ImageSize(options.outWidth, options.outHeight, exifinfo.rotation), exifinfo);
}
protected InputStream getImageStream(ImageDecodingInfo imagedecodinginfo)
{
return imagedecodinginfo.getDownloader().getStream(imagedecodinginfo.getImageUri(), imagedecodinginfo.getExtraForDownloader());
}
protected android.graphics.BitmapFactory.Options prepareDecodingOptions(ImageSize imagesize, ImageDecodingInfo imagedecodinginfo)
{
ImageScaleType imagescaletype = imagedecodinginfo.getImageScaleType();
int i;
android.graphics.BitmapFactory.Options options;
if (imagescaletype == ImageScaleType.NONE)
{
i = ImageSizeUtils.computeMinImageSampleSize(imagesize);
} else
{
ImageSize imagesize1 = imagedecodinginfo.getTargetSize();
boolean flag;
if (imagescaletype == ImageScaleType.IN_SAMPLE_POWER_OF_2)
{
flag = true;
} else
{
flag = false;
}
i = ImageSizeUtils.computeImageSampleSize(imagesize, imagesize1, imagedecodinginfo.getViewScaleType(), flag);
}
if (i > 1 && loggingEnabled)
{
Object aobj[] = new Object[4];
aobj[0] = imagesize;
aobj[1] = imagesize.scaleDown(i);
aobj[2] = Integer.valueOf(i);
aobj[3] = imagedecodinginfo.getImageKey();
L.d("Subsample original image (%1$s) to %2$s (scale = %3$d) [%4$s]", aobj);
}
options = imagedecodinginfo.getDecodingOptions();
options.inSampleSize = i;
return options;
}
protected InputStream resetStream(InputStream inputstream, ImageDecodingInfo imagedecodinginfo)
{
try
{
inputstream.reset();
}
catch (IOException ioexception)
{
IoUtils.closeSilently(inputstream);
return getImageStream(imagedecodinginfo);
}
return inputstream;
}
private class ImageFileInfo
{
public final ExifInfo exif;
public final ImageSize imageSize;
protected ImageFileInfo(ImageSize imagesize, ExifInfo exifinfo)
{
imageSize = imagesize;
exif = exifinfo;
}
}
private class ExifInfo
{
public final boolean flipHorizontal;
public final int rotation;
protected ExifInfo()
{
rotation = 0;
flipHorizontal = false;
}
protected ExifInfo(int i, boolean flag)
{
rotation = i;
flipHorizontal = flag;
}
}
}